package com.viknix.threadpool.manager.config.service;

import com.viknix.threadpool.manager.common.model.PoolParameterInfo;
import com.viknix.threadpool.manager.config.dump.ConfigInfo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @Author: Dongqi
 * @Date: 2021/10/29 10:39
 * @Version 1.0
 * @Description: ConfigService
 */
public interface ConfigService {

    /**
     * 从数据库中查询线程池的配置参数
     *
     * @param threadPoolId 线程池id
     * @param projectId    项目id
     * @param namespace    命名空间
     * @return 参数信息
     */
    PoolParameterInfo getParameterInfo(String threadPoolId, String projectId, String namespace);

    /**
     * 服务端执行长轮询
     *
     * @param request          请求对象
     * @param response         响应对象
     * @param clientMd5Map     将 threadPoolId 和 projectId 和 namespace 拼接起来 作为key；线程池配置的 md5 作为 value 放到 clientMd5Map 集合中
     * @param probeRequestSize 请求参数的长度
     * @return 请求是否成功
     */
    String doPollingConfig(HttpServletRequest request, HttpServletResponse response, Map<String, String> clientMd5Map, int probeRequestSize);

    /**
     * 新增或者更新配置
     *
     * @param parameterInfo 配置信息
     * @return 影响记录数
     */
    int insertOrUpdate(PoolParameterInfo parameterInfo);

    /**
     * 根据 groupKey 获取 md5
     *
     * @param groupKey groupKey
     * @return md5
     */
    String getContentMd5(String groupKey);

    /**
     * 查询 ConfigInfo 信息
     *
     * @param threadPoolId 线程池id
     * @param projectId    项目id
     * @param namespace    命名空间
     * @return
     */
    ConfigInfo getConfigInfo(final String threadPoolId, final String projectId, final String namespace);
}
